package xin.marcher.module.construction.manager.impl;

import xin.marcher.module.common.enums.ProductTypeEnum;
import xin.marcher.module.common.exception.ProductBizException;
import xin.marcher.module.common.exception.ProductErrorCodeEnum;
import xin.marcher.module.common.utils.IDUtils;
import xin.marcher.module.construction.domain.entity.ProductAutoNoDO;
import xin.marcher.module.construction.manager.ProductNoManager;
import xin.marcher.module.construction.mapper.ProductAutoNoMapper;

import javax.annotation.Resource;

/**
 * 商品编码
 */
public class ProductNoManagerImpl implements ProductNoManager {

    /**
     * 6位序列号
     */
    private static final int width = 6;

    @Resource
    private ProductAutoNoMapper productAutoNoMapper;

    /**
     * 生成商品编码
     *
     * @param sourceType 资源类型（1-item、2-sku）
     * @return 商品编码
     */
    @Override
    public String generateProductNo(Integer sourceType) {
        ProductTypeEnum productTypeEnum = ProductTypeEnum.getByCode(sourceType);
        if (productTypeEnum == null) {
            throw new ProductBizException(ProductErrorCodeEnum.PARAM_ERROR);
        }
        return getProductNo(productTypeEnum.getValue());
    }

    /**
     * 获取组装后的商品编码
     *
     * @param prefixNo 前缀编码
     * @return 商品编码
     */
    private String getProductNo(String prefixNo) {
        ProductAutoNoDO productAutoNoDO = new ProductAutoNoDO();
        productAutoNoMapper.insert(productAutoNoDO);
        Long autoNo = productAutoNoDO.getId();
        return prefixNo + IDUtils.genId(autoNo, width);
    }
}
